package com.LachesismStorm.lachesism.member.service;

import com.LachesismStorm.lachesism.core.common.response.ResponsePage;
import com.LachesismStorm.lachesism.core.common.response.ResponseResult;
import com.LachesismStorm.lachesism.member.vo.*;
import com.LachesismStorm.lachesism.member.vo.dto.*;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;

/**
 * @Author lachesism
 * @Date 2024-04-10 16:06
 **/
@Service
public interface LuntaiService {

    Integer addCarInfo(LuntaiUserCar car);

    Integer addTyreInfo(LuntaiUserTyre tyre);

    List<UserCarsDto> getCars();

    void updateCar(LuntaiUserCar car);

    void updateTyreInfo(LuntaiUserTyre tyre);

    List<LuntaiUserTyre> getTyreInfoByCarId(Integer carId);

    List<LuntaiTyre> getTyreBrand();

    void policyExtensionRequest(LuntaiPolicyExtensionRequest request);

    void editPolicyExtensionRequest(LuntaiPolicyExtensionRequest request);

    List<PolicyExtensionRequestDto> getPolicyExtensionRequestList(Integer status);

    PolicyExtensionRequestInfoDto getPolicyExtensionRequestInfo(Integer requestId);

    List<LuntaiStore> getStoreList(LuntaiStore store);

    List<AreaList> geAllArea();

    List<LuntaiMessage> getMessageList();

    void editMessage(LuntaiMessage message);

    List<LuntaiIntroduce> getAllIntroduce();

    List<LuntaiCoupons> getCoupons();

    List<LuntaiNews> getNews();

    LuntaiNews getNewsInfo(Integer newsId);

    void rescueApplication(LuntaiRescueApplication application);

    void editRescueApplication(LuntaiRescueApplication application);

    List<LuntaiRescueApplicationDto> getRescueApplicationList(Integer status);

    RescueApplicationDto getRescueApplicationInfoById(Integer applicationId);

    List<CarsListDto> getCarSummarizeInformation(UserCarsDto dto);



    void storeApplication(LuntaiStoreApplication application);

    List<LuntaiStoreApplication> getStoreApplicationList();

    String uploadPic(MultipartFile file);

    List<LuntaiRescueType> getRescueTypeList();

    List<LuntaiUserTyre> getTyreListByCarId(Integer carId);

    Boolean checkIsApplyStore();

    List<LuntaiStoreApplication> getStoreApplyResult();

    List<LuntaiStore> getStoreByLocation(LuntaiStore luntaiStore);

    UserCarsDto getCarInfoById(Integer carId);

    void sendAuditResult(OfaPushVO ofaPushVO);

    void sendRequireAudit(OfaPushVO ofaPushVO);


    Map<String,String> getLocationByCoords(String coords) throws IOException, IOException;

    List<String> getQrcodeInfo(String barcode);

    void auditStoreApplication(LuntaiStoreApplication application);

    Integer addTyreInstallRequest(LuntaiTyreInstallRequest request);

    void addTyreInstallRequestTyres(List<LuntaiTyreInstallLog> tyres);

    List<TyreInstallLogDto> getTyreListByCarId2(Integer carId);

    List<InstallRequestDto> getUninstallRequests();

    List<TyreInstallListDto> getTyreInstallRequest(Integer status);

    void editTyreInstallRequest(LuntaiTyreInstallRequest request);

    List<TyreInstallListDto> getRequestListByStoreId(Integer storeId,Integer status);

    void claimsApplication(LuntaiClaimsRequest request);

    ResponsePage<ClaimRequestDto> getClaimApplicationList(ClaimRequestDto request);

    void updateClaimsApplication(LuntaiClaimsRequest request);

    ClaimDetailInfoDto getDetailInfoByClaimId(Integer requestId);

    InstallTyreDetailInfoDto getInstallTyreInfoByRequestId(Integer requestId);

    LuntaiStoreAdminDto getStoreInfoByAdmin();


    LuntaiStoreApplicationDto getStoreApplicationById(Integer applicationId);

    List<LuntaiExampleImage> getExampleImg(Integer type);

    Boolean getAuditState(Integer type);

    ResponseResult withdrawStore(String phone);

    void updateMenu(SysMenu menu);
    void deleteTyreInstallRequestLog(Integer requestId);

    Map<String, String> uploadVideo(MultipartFile file);

    void sendAuditResult2(OfaPushVO pushInfo);

    HashMap<String, Object> getCarInfoByLicensePlate(String licensePlate);

    List<TyreInstallListDto> getInstallRequestListByLicensePlate(Integer status, String licensePlate);

    ResponsePage<LuntaiStoreApplication> getStoreListByAdmin(LuntaiStoreApplication application);

    Map<String, Integer> storeFourInfo();

    Map<String, Integer> claimFourInfo();

    Map<String, Integer> totalThreeInfo();

    Map<String, Integer> claimFourInfoOnUser(Integer userId);

    ResponsePage<TyreInstallListDto> getTyreInstallRequestOnPage(Integer status, Integer pageNum, Integer pageSize,String licensePlate);


//    void InstallTyres(TyreInstallParam param);

}
